<?php
// +----------------------------------------------------------------------
// | 后台用户管理
// +----------------------------------------------------------------------
// | Author: 李乾坤 <261001642@qq.com>
// +----------------------------------------------------------------------

class UserAction extends CommonAction {
	public function _filter(&$map){
		if($map['nickname']!=""){
			$map['nickname']=array('like',"%".$map['nickname']."%");
		}else{
			if($map['account']!=""){
				$map['account']=array('like',"%".$map['account']."%");
			}
		}
	}
	// 检查帐号
	public function checkAccount() {
        if(!Think::validate($_POST['account'],'/^[a-z]\w{4,}$/i')) {
            $this->error( '用户名必须是以字母打头，且5位以上！');
        }
		$User = D("User");
        // 检测用户名是否冲突
        $name  =  $_REQUEST['account'];
        $result  =  $User->getByAccount($name);
        if($result) {
        	$this->error('该用户名已经存在！');
        }else {
           	$this->success('该用户名可以使用！');
        }
    }
	// 插入数据
	public function insert() {
		$_POST['password']=md5($_POST['password']);
		$_POST['type']='u';
		$User	 =	 D("User");
		if(!$User->create()) {
			$this->error($User->getError());
		}else{
			// 写入帐号数据
			if($result	 =	 $User->add()) {
				$this->addRole($result);
				$this->success('数据写入成功！');
			}else{
				echo $User->getlastsql();
				$this->error('数据写入失败！');
			}
		}
	}
	function _before_edit(){
		$AuthGroup=M("AuthGroup");
		$list=$AuthGroup->where('status=1')->getField('id,title');
		$this->assign('rolearr',$list);
		$id=$_REQUEST['id'];
		$AuthGroupAccess=M("AuthGroupAccess");
		$vo=$AuthGroupAccess->where("uid={$id}")->find();
		$this->assign('roleid',$vo['group_id']);
	}
	function _tigger_update(){
		$role_id=intval($_POST['roleid']);
		$this->addRole(intval($_POST['id']),$role_id);
	}
	protected function addRole($userId,$roleId) {
		//新增用户自动加入相应权限组
		$AuthGroupAccess = D("AuthGroupAccess");
		$AuthGroupAccess->where('uid='.$userId)->delete();
		$AuthGroupAccess->uid	=	$userId;
        $AuthGroupAccess->group_id	=	$roleId;
		$AuthGroupAccess->add();
	}

    //重置密码
    public function resetPwd()
    {
    	$id  =  $_POST['id'];
        $password = $_POST['password'];
        if(''== trim($password)) {
        	$this->error('密码不能为空！');
        }
        $User = D('User');
		$User->password	=	md5($password);
		$User->id			=	$id;
		$result	=	$User->save();
        if(false !== $result) {
            $this->success("密码修改为$password");
        }else {
        	$this->error('重置密码失败！');
        }
    }
    public function sort()
    {
        $Manual = M('User');
        if(!empty($_GET['sortId'])) {
            $map = array();
            $map['status'] = 1;
			$map['type']='u';
            $map['id']   = array('in',$_GET['sortId']);
        }else{
            $map['status'] = 1;
        }
        $sortList   =   $Manual->where($map)->order('sort asc')->select();
        $this->assign("sortList",$sortList);
        $this->display();
        return ;
    }
	
    function keupload(){
        $r=array('error'=>0);
        $dir =$_GET['dir'] ? $_GET['dir'].'/' : '';
        $thumb=$_GET['thumb'];
        $from=$_GET['from'];
        if($from=='artcile') $dir='Article/';
        if(empty($_FILES['imgFile']['name'])){
            $r['error']=1;
            $r['message']= '请选择文件!';
        }else{
            import("ORG.Net.UploadFile");
            $upload = new UploadFile();
            $upload->maxSize= 1000000;
            $upload->allowExts  = array('gif', 'jpg', 'jpeg', 'png', 'bmp','swf', 'flv','swf', 'flv', 'mp3', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb','doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2');
            $upload->savePath =  './Public/Uploads/'.$dir;
            // 记录上传成功ID
            $uploadId =  array();
            $savename = array();
            //执行上传操作
            if(!$upload->upload()) {
                $r['error']=1;
                $r['message']  =  $upload->getErrorMsg();
            }else {
                 //取得成功上传的文件信息
                $info = $upload->getUploadFileInfo();
                $f=$info[0];
                $filename=$f['savepath'].$f['savename'];
                if($thumb){
                    $thumb=explode(',',$thumb);
                    $image =  getimagesize($filename);
                    if(false !== $image) {
                        //是图像文件生成缩略图
                        $thumbWidth     =   $thumb[0];
                        $thumbHeight        =   $thumb[1];
                        // 生成图像缩略图
                        import('ORG.Util.Image');
                        $thumbname  =   $f['savepath'].'thu_'.$f['savename'];
                        Image::thumb($filename,$thumbname,'',$thumbWidth,$thumbHeight,true);
                        if($thumb[2]){
                            // 生成缩略图之后删除原图
                            unlink($filename);
                            //$f['savename']=$thumbPrefix.$f['savename'];
                            $r['url']=$thumbname;
                        }else{
                            $r['url']=$filename;
                        }
                    }
                }else{
                    $r['url']=$filename;
                }
            }
        }
        echo json_encode($r);
    }
    function file_manager(){
        $root_path = './Public/Uploads/';
        $root_url = './Public/Uploads/';
        $ext_arr = array('gif', 'jpg', 'jpeg', 'png', 'bmp');
        //$dir_name = empty($_GET['dir']) ? '' : trim($_GET['dir']);
        if (!in_array($dir_name, array('', 'image', 'flash', 'media', 'file'))) {
            echo "Invalid Directory name.";
            exit;
        }
        if ($dir_name !== '') {
            $root_path .= $dir_name . "/";
            $root_url .= $dir_name . "/";
            if (!file_exists($root_path)) {
                mkdir($root_path);
            }
        }

        //根据path参数，设置各路径和URL
        if (empty($_GET['path'])) {
            $current_path = realpath($root_path) . '/';
            $current_url = $root_url;
            $current_dir_path = '';
            $moveup_dir_path = '';
        } else {
            $current_path = realpath($root_path) . '/' . $_GET['path'];
            $current_url = $root_url . $_GET['path'];
            $current_dir_path = $_GET['path'];
            $moveup_dir_path = preg_replace('/(.*?)[^\/]+\/$/', '$1', $current_dir_path);
        }
        echo realpath($root_path);
        //排序形式，name or size or type
        $order = empty($_GET['order']) ? 'name' : strtolower($_GET['order']);

        //不允许使用..移动到上一级目录
        if (preg_match('/\.\./', $current_path)) {
            echo 'Access is not allowed.';
            exit;
        }
        //最后一个字符不是/
        if (!preg_match('/\/$/', $current_path)) {
            echo 'Parameter is not valid.';
            exit;
        }
        //目录不存在或不是目录
        if (!file_exists($current_path) || !is_dir($current_path)) {
            echo 'Directory does not exist.';
            exit;
        }

        //遍历目录取得文件信息
        $file_list = array();
        if ($handle = opendir($current_path)) {
            $i = 0;
            while (false !== ($filename = readdir($handle))) {
                if ($filename{0} == '.') continue;
                $file = $current_path . $filename;
                if (is_dir($file)) {
                    $file_list[$i]['is_dir'] = true; //是否文件夹
                    $file_list[$i]['has_file'] = (count(scandir($file)) > 2); //文件夹是否包含文件
                    $file_list[$i]['filesize'] = 0; //文件大小
                    $file_list[$i]['is_photo'] = false; //是否图片
                    $file_list[$i]['filetype'] = ''; //文件类别，用扩展名判断
                } else {
                    $file_list[$i]['is_dir'] = false;
                    $file_list[$i]['has_file'] = false;
                    $file_list[$i]['filesize'] = filesize($file);
                    $file_list[$i]['dir_path'] = '';
                    $file_ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
                    $file_list[$i]['is_photo'] = in_array($file_ext, $ext_arr);
                    $file_list[$i]['filetype'] = $file_ext;
                }
                $file_list[$i]['filename'] = $filename; //文件名，包含扩展名
                $file_list[$i]['datetime'] = date('Y-m-d H:i:s', filemtime($file)); //文件最后修改时间
                $i++;
            }
            closedir($handle);
        }
        usort($file_list, '$this->cmp_func');

        $result = array();
        //相对于根目录的上一级目录
        $result['moveup_dir_path'] = $moveup_dir_path;
        //相对于根目录的当前目录
        $result['current_dir_path'] = $current_dir_path;
        //当前目录的URL
        $result['current_url'] = $current_url;
        //文件数
        $result['total_count'] = count($file_list);
        //文件列表数组
        $result['file_list'] = $file_list;
        //输出JSON字符串
        header('Content-type: application/json; charset=UTF-8');
        echo json_encode($result);
    }
    //排序
    function cmp_func($a, $b) {
        global $order;
        if ($a['is_dir'] && !$b['is_dir']) {
            return -1;
        } else if (!$a['is_dir'] && $b['is_dir']) {
            return 1;
        } else {
            if ($order == 'size') {
                if ($a['filesize'] > $b['filesize']) {
                    return 1;
                } else if ($a['filesize'] < $b['filesize']) {
                    return -1;
                } else {
                    return 0;
                }
            } else if ($order == 'type') {
                return strcmp($a['filetype'], $b['filetype']);
            } else {
                return strcmp($a['filename'], $b['filename']);
            }
        }
    }
	
}
?>